For nylig kørte jeg noget af min JavaScript-kode gennem Crockfords JSLint, og det gav følgende fejl: Problem ved linje 1 tegn 1: Mangler "brug streng" sætning. Når jeg søgte, indså jeg, at nogle mennesker tilføjede "brug streng"; ind i deres JavaScript-kode. Når jeg tilføjede udsagnet, stoppede fejlen med at vises. Desværre afslørede Google ikke meget af historikken bag denne strengerklæring. Bestemt skal det have noget at gøre med, hvordan JavaScript fortolkes af browseren, men jeg aner ikke, hvad effekten ville være. Så hvad er "brug streng"; alt om, hvad betyder det, og er det stadig relevant? Svarer nogen af de aktuelle browsere på "brug streng"; streng eller er det til fremtidig brug?
2020-12-07 22:04:41
Denne artikel om Javascript Strict Mode kan interessere dig: John Resig - ECMAScript 5 Strict Mode, JSON og mere For at citere nogle interessante dele: Streng tilstand er en ny funktion i ECMAScript 5, der giver dig mulighed for at placere et program eller en funktion i en "streng" driftskontekst. Denne strenge kontekst forhindrer visse handlinger i at blive taget og giver flere undtagelser. Og: Streng tilstand hjælper på et par måder: Det fanger nogle almindelige kodende bloopere og kaster undtagelser. Det forhindrer eller kaster fejl, når der udføres relativt "usikre" handlinger (såsom at få adgang til det globale objekt). Det deaktiverer funktioner, der er forvirrende eller dårligt gennemtænkte. Bemærk også, at du kan anvende "streng tilstand" til hele filen ... Eller du kan kun bruge den til en bestemt funktion (stadig citerer fra John Resigs artikel): // Ikke-streng kode ... (fungere(){ "brug streng"; // Definer dit bibliotek strengt ... }) (); // Ikke-streng kode ... Hvilket kan være nyttigt, hvis du skal blande gammel og ny kode ;-) Så jeg antager, at det er lidt som "brug streng", du kan bruge i Perl (deraf navnet?): Det hjælper dig med at lave færre fejl ved at opdage flere ting, der kan føre til brud. Streng tilstand understøttes nu af alle større browsere. Inde i native ECMAScript-moduler (med import- og eksporterklæringer) og ES6-klasser er streng tilstand altid aktiveret og kan ikke deaktiveres. | Det er en ny funktion i ECMAScript 5. John Resig skrev et godt sammendrag af det. Det er bare en streng, du lægger i dine JavaScript-filer (enten øverst i din fil eller inde i en funktion), der ser sådan ud: "brug streng"; At sætte det i din kode nu bør ikke forårsage problemer med aktuelle browsere, da det bare er en streng. Det kan medføre problemer med din kode i fremtiden, hvis din kode overtræder pragmaet. For eksempel, hvis du i øjeblikket har foo = "bar" uden at definere foo først, begynder din kode at mislykkes ... hvilket er en god ting efter min mening. | Påstanden "brug streng"; instruerer browseren om at bruge den strenge tilstand, som er et reduceret og sikrere sæt af JavaScript. Liste over funktioner (ikke udtømmende) Tillader ikke globale variabler. (Fanger manglende varedeklarationer og stavefejl i variabelnavne) Stille mislykkede opgaver kaster fejl i streng tilstand (tildeling af NaN = 5;) Forsøg på at slette egenskaber, der ikke kan slettes, kaster (slet Object.prototype) Kræver, at alle ejendomsnavne i et objekt bogstaveligt er unikke (var x = {x1: "1", x1: "2"}) Funktionsparameternavne skal være entydige (funktionssum (x, x) {...}) Forbyder oktal syntaks (var x = 023; nogle devs antager forkert, at et foregående nul ikke gør noget for at ændre antallet.) Forbyder med nøgleordet eval i streng tilstand introducerer ikke nye variabler Forbyder sletning af almindelige navne (slet x;) Forbyder binding eller tildeling af navneevalueringen og argumenter i enhver form Streng tilstand alias ikke egenskaber argumenter objekt med de formelle parametre. (dvs. i funktionssummen (a, b) {returner argumenter [0] + b;} Dette fungerer, fordi argumenter [0] er bundet til a og så videre.) arguments.callee understøttes ikke [Ref: Streng tilstand, Mozilla Developer Network] | Hvis folk er bekymrede for at bruge brug streng, kan det være værd at tjekke denne artikel: ECMAScript 5 'Streng tilstand' understøtter i browsere. Hvad betyder dette? NovoGeek.com - Krishnas weblog Det taler om browsersupport, men vigtigere, hvordan man håndterer det sikkert: funktion isStrictMode () { returner! dette; } / * returnerer falsk, da 'dette' refererer til globalt objekt og '! dette' bliver falsk * / funktion isStrictMode () { "brug streng"; returner! dette; } / * returnerer sandt, da nøgleordet 'dette' i streng tilstand refererer ikke til globalt objekt, i modsætning til traditionel JS. Så her, 'dette' er 'udefineret' og '! Dette' bliver sandt. * / | Et forsigtighedsord, alle jer hårdt opladende programmører: at anvende "brug streng" på eksisterende kode kan være farligt! Denne ting er ikke et følelses godt klistermærke, som du kan slå på koden for at gøre det 'bedre'. Med "brug streng" pragma, vil browseren pludselig Kaste undtagelser på tilfældige steder, som den aldrig kastede før, bare fordi du på det sted gør noget, som standard / løs JavaScript lykkeligt tillader, men strenge JavaScript afskyr! Du kan have strenge overtrædelser, der gemmer sig i sjældent brugte opkald i din kode, der kun kaster en undtagelse, når de til sidst kører - sig i det produktionsmiljø, som dine betalende kunder bruger! Hvis du vil tage springet, er det en god ide at anvende "brug streng" sammen med omfattende enhedstest og en strengt konfigureret JSHint-opgaver, der giver dig en vis tillid til, at der ikke er noget mørkt hjørne af dit modul, der vil sprænge forfærdeligt bare fordi du har aktiveret Streng tilstand. Eller hej, her er en anden mulighed: Bare tilføj ikke "brug streng" til nogen af din ældre kode, det er sandsynligvis mere sikkert på den måde, ærligt. DEFINITIVT Føj IKKE "brug streng" til moduler, du ikke ejer ellervedligeholde, ligesom tredjepartsmoduler. Jeg tror, selvom det er et dødbringende bur, kan "brug streng" være gode ting, men du skal gøre det rigtigt. Det bedste tidspunkt at være streng er, når dit projekt er greenfield, og du starter fra bunden. Konfigurer JSHint / JSLint med alle de advarsler og muligheder, der er skruet op så stramt som dit team kan mave, få et godt build / test / assert-system, du er rigget som Grunt + Karma + Chai, og start først DAN med at markere alle dine nye moduler som " brug streng ". Vær parat til at helbrede mange niggly fejl og advarsler. Sørg for, at alle forstår tyngdekraften ved at konfigurere build til FAIL, hvis JSHint / JSLint frembringer nogen overtrædelser. Mit projekt var ikke et greenfield-projekt, da jeg vedtog "brug streng". Som et resultat er min IDE fuld af røde mærker, fordi jeg ikke har "brug streng" på halvdelen af mine moduler, og JSHint klager over det. Det er en påmindelse for mig om, hvilken refactoring jeg skal gøre i fremtiden. Mit mål er at være rødt mærkefrit på grund af alle mine manglende "brug strenge" udsagn, men det er år væk nu. | Brug 'brug streng'; gør ikke pludselig din kode bedre. JavaScript-streng tilstand er en funktion i ECMAScript 5. Du kan aktivere streng tilstand ved at erklære dette øverst i dit script / funktion. 'brug streng'; Når en JavaScript-motor ser dette direktiv, begynder det at fortolke koden i en speciel tilstand. I denne tilstand kastes der fejl, når visse kodningsmetoder, der kan ende med at blive potentielle fejl, opdages (hvilket er grunden til den strenge tilstand). Overvej dette eksempel: var a = 365; var b = 030; I deres besættelse af at oprette de numeriske bogstaver har udvikleren utilsigtet initialiseret variabel b med en oktal bogstavelig. Ikke-streng tilstand fortolker dette som en numerisk bogstav med værdi 24 (i base 10). Imidlertid vil streng tilstand kaste en fejl. Se dette svar for en ikke-udtømmende liste over specialiteter i streng tilstand. Hvor skal jeg bruge 'brug streng' ;? I min nye JavaScript-applikation: Absolut! Streng tilstand kan bruges som en whistleblower, når du laver noget dumt med din kode. I min eksisterende JavaScript-kode: Sandsynligvis ikke! Hvis din eksisterende JavaScript-kode har udsagn, der er forbudt i streng tilstand, bryder applikationen simpelthen. Hvis du vil have streng tilstand, skal du være parat til at debugge og rette din eksisterende kode. Dette er grunden til at bruge 'brug streng'; gør ikke pludselig din kode bedre. Hvordan bruger jeg streng tilstand? Indsæt en 'brug streng'; erklæring oven på dit script: // Fil: myscript.js 'brug streng'; var a = 2; .... Bemærk, at alt i filen myscript.js vil blive fortolket i streng tilstand. Eller indsæt en 'brug streng'; udsagn oven på din funktionslegeme: funktion doSomething () { 'brug streng'; ... } Alt inden for det leksikale funktionsomfang doNågot vil blive fortolket i streng tilstand. Ordet leksikalt omfang er vigtigt her. For eksempel, hvis din strenge kode kalder en funktion i et bibliotek, der ikke er streng, udføres kun din kode i streng tilstand og ikke den kaldte funktion. Se dette svar for en bedre forklaring. Hvilke ting er forbudt i streng tilstand? Jeg fandt en god artikel, der beskriver flere ting, der er forbudt i streng tilstand (bemærk, at dette ikke er en eksklusiv liste): Anvendelsesområde Historisk har JavaScript været forvirret over, hvordan det fungerer er omfattet. Nogle gange ser de ud til at være statisk afgrænset, men nogle funktioner får dem til at opføre sig som de er dynamisk afgrænset. Dette er forvirrende, hvilket gør programmer vanskelige at læse og forstå. Misforståelse forårsager fejl. Det er også et problem for ydeevne. Statisk scoping vil muliggøre, at variabel binding finder sted ved kompilering tid, men kravet om dynamisk omfang betyder, at bindingen skal være udsat for runtime, hvilket har en betydelig præstation straf. Streng tilstand kræver, at al variabel binding udføres statisk. Det betyder, at de funktioner, der tidligere krævede dynamisk binding skal elimineres eller ændres. Specifikt er med-erklæringen elimineret, og eval funktionens evne til at manipulere med dets opkalders miljø er stærkt begrænset. En af fordelene ved streng kode er, at værktøjer som YUI Compressor kan gøre et bedre job, når det behandles. Implicerede globale variabler JavaScript har antydet globale variabler. Hvis du erklærer ikke eksplicit en variabel, en global variabel er implicit erklæret for dig. Dette gør programmeringen lettere for begyndere, fordi de kan forsømme noget af deres grundlæggende husholdning gøremål. Men det gør styringen af større programmer meget mere vanskeligt, og det nedbryder pålideligheden betydeligt. Så strengt tilstand oprettes ikke længere implicitte globale variabler. Du burde erklær eksplicit alle dine variabler. Global lækage Der er en række situationer, der kan forårsage dette at være bundet til det globale objekt. For eksempel, hvis du glemmer at give det nye præfiks, når du ringer til en konstruktørfunktion, den konstruktørens dette vil være uventet bundet til det globale objekt, så i stedet for at initialisere et nyt objekt, bliver det i stedet lydløst manipulation med globale variabler. I disse situationer vil streng tilstand gøre det i stedet binde dette til udefineret, hvilket får konstruktøren til at smid i stedet en undtagelse, så fejlen kan registreres meget før. Støjende fejl JavaScript har altid haft skrivebeskyttede egenskaber, men du kunne ikke oprette dem selv før ES5's Object.createProperty funktion udsat for denne kapacitet. Hvis du forsøgte at tildele en værdi til en skrivebeskyttet ejendom, ville den mislykkes lydløst. Opgaven ville ikke ændre ejendommens værdi, men dit program vil fortsætte som selvom det havde. Dette er en integritetsrisiko, der kan få programmer til at gå ind i en inkonsekvent tilstand. I streng tilstand forsøger du at ændre en skrivebeskyttet ejendom kaster en undtagelse. Octal Den oktale (eller base 8) repræsentation af tal var ekstremt nyttigt, når du foretager programmering på maskinniveau på maskiner, hvis ord er størrelser var et multiplum af 3. Du havde brug for oktal, når du arbejder med CDC 6600 mainframe, som havde en ordstørrelse på 60 bit. Hvis du kunne læse oktalt, kan du se på et ord som 20 cifre. To cifre repræsenteret op-koden, og et ciffer identificerede et af 8 registre. Under langsom overgang fra maskinkoder til sprog på højt niveau, var det menes at være nyttige til at levere oktale former på programmeringssprog. I C var en yderst uheldig gengivelse af oktalitet valgt: Ledende nul. Så i C betyder 0100 64, ikke 100, og 08 er et fejl, ikke 8. Desværre har denne anakronisme været kopieret til næsten alle moderne sprog, inklusive JavaScript, hvor det bruges kun til at oprette fejl. Det har intet andet formål. Så i i streng tilstand er oktale former ikke længere tilladt. Et cetera Argumenterne pseudo array bliver lidt mere array-lignende i ES5. I streng tilstand mister den sin callee og opkalder ejendomme. Dette gør det muligt at videregive dine argumenter til utro kode uden at opgive en masse fortrolig sammenhæng. Også den argumenter egenskab for funktioner er elimineret. I streng tilstand vil duplikatnøgler i en funktionel bogstav producere en syntaks fejl. En funktion kan ikke have to parametre med samme navn. En funktion kan ikke have en variabel med samme navn som en af dens parametre. En funktion kan ikke slette sine egne variabler. Et forsøg på at slette en ikke-konfigurerbar egenskab kaster nu en undtagelse. Primitiv værdier er ikke implicit pakket. Reserverede ord til fremtidige JavaScript-versioner ECMAScript 5 tilføjer en liste med reserverede ord. Hvis du bruger dem som variabler eller argumenter, vil streng tilstand kaste en fejl. De reserverede ord er: implementerer, grænseflade, lad, pakke, privat, beskyttet, offentligt, statisk og udbytte Yderligere læsning Streng tilstand - JavaScript | MDN Browsersupport til streng tilstand Overgang til streng tilstand | Jeg anbefaler stærkt enhver udvikler at begynde at bruge streng tilstand nu. Der er nok browsere, der understøtter det, at streng tilstand legitimt kan hjælpe med at redde os fra fejl, som vi ikke engang vidste, var i din kode. I den indledende fase vil der tilsyneladende være fejl, vi aldrig har stødt på før. For at få den fulde fordel er vi nødt til at udføre ordentlig test efter at have skiftet til streng tilstand for at sikre, at vi har fanget alt. Vi kaster bestemt ikke bare brug strengt i vores kode og antager, at der ikke er nogen fejl. Så churn er, at det er tid til at begynde at bruge denne utroligt nyttige sprogfunktion til at skrive bedre kode. For eksempel, var person = { navn: 'xyz', position: 'abc', fuldnavn: funktion () {"brug streng"; returner dette.navn; } }; JSLint er en debugger skrevet af Douglas Crockford. Indsæt blot dit script, så scanner det hurtigt efter mærkbare problemer og fejl i din kode. | Jeg vil gerne tilbyde et noget mere funderet svar, der supplerer de andre svar. Jeg håbede på at redigere det mest populære svar, men mislykkedes. Jeg forsøgte at gøre det så omfattende og komplet som muligt. Du kan se MDN-dokumentationen for at få flere oplysninger. "brug streng" et direktiv introduceret i ECMAScript 5. Direktiver svarer til udsagn, men alligevel forskellige. brug streng indeholder ikke nøgleord: Direktivet er en simpel udtrykserklæring, der består af en særlig streng bogstavelig (i enkelte eller dobbelte citater). JavaScript-motorer, der ikke implementerer ECMAScript 5, ser kun et udtryk for udsagn uden bivirkninger. Det forventes, at fremtidige versioner af ECMAScript-standarder introducerer brug som et rigtigt nøgleord; citaterne ville derved blive forældede. brug streng kan kun bruges i begyndelsen af et script eller en funktion, dvs. det skal gå forud for enhver anden (reel) udsagn. Det behøver ikke at være den første instruktion i et funktionsskrift: det kan indledes med andre sætningsudtryk, der består af strenglitteraler (og JavaScriptimplementeringer kan behandle dem som implementeringsspecifikke direktiver). Strenglitterære udsagn, der følger en første ægte sætning (i et script eller en funktion) er enkle udtryksudsagn. Tolke må ikke tolke dem som direktiver, og de har ingen virkning. Direktivet om brug af strenge indikerer, at følgende kode (i et script eller en funktion) er streng kode. Koden på det højeste niveau i et script (kode, der ikke er i en funktion) betragtes som streng kode, når scriptet indeholder et brugsstrikt direktiv. Indholdet af en funktion betragtes som streng kode, når selve funktionen er defineret i en streng kode, eller når funktionen indeholder et brugsstrikt direktiv. Kode, der sendes til en eval () -metode, betragtes som streng kode, når eval () blev kaldt fra en streng kode eller indeholder selve brugen af det strenge direktiv. Den strenge tilstand af ECMAScript 5 er en begrænset delmængde af JavaScript-sproget, hvilket eliminerer relevante underskud på sproget og indeholder strengere fejlkontrol og højere sikkerhed. Følgende viser forskellene mellem streng tilstand og normal tilstand (hvoraf de første tre er særlig vigtige): Du kan ikke bruge med-erklæringen i streng tilstand. I streng tilstand skal alle variabler erklæres: Hvis du tildeler en værdi til en identifikator, der ikke er deklareret som variabel, funktion, funktionsparameter, catch-clause-parameter eller egenskab for det globale objekt, får du en ReferenceError. I normal tilstand erklæres identifikatoren implicit som en global variabel (som en egenskab for det globale objekt) I streng tilstand har nøgleordet dette værdien udefineret i funktioner, der blev påberåbt som funktioner (ikke som metoder). (I normal tilstand peger dette altid på det globale objekt). Denne forskel kan bruges til at teste, om en implementering understøtter streng tilstand: var hasStrictMode = (funktion () {"brug streng"; returner dette === udefineret} ()); Også når en funktion påkaldes med call () eller anvendes i streng tilstand, er dette nøjagtigt værdien af det første argument i call () eller Apply () invocation. (I normal tilstand erstattes null og udefineret af det globale objekt, og værdier, som ikke er objekter, kastes i objekter.) I streng tilstand får du en TypeError, når du forsøger at tildele til skrivebeskyttede egenskaber eller at definere nye egenskaber til et ikke-udvideligt objekt. (I normal tilstand fejler begge simpelthen uden fejlmeddelelse.) I streng tilstand, når du videregiver kode til eval (), kan du ikke erklære eller definere variabler eller funktioner inden for ringerne (som du kan gøre det i normal tilstand). I stedet oprettes et nyt omfang til eval (), og variablerne og funktionerne er inden for dette omfang. Dette omfang ødelægges, når eval () afslutter eksekveringen. I streng tilstand indeholder argument-objektet for en funktion en statisk kopi af de værdier, der sendes til den funktion. I normal tilstand har argument-objektet en noget "magisk" opførsel: Elementerne i arrayet og de navngivne funktionsparametre henviser begge til den samme værdi. I streng tilstand får du en syntaksfejl, når sletteoperatoren efterfølges af en ikke-kvalificeret identifikator (en variabel, funktion eller funktionsparameter). I normal tilstand ville sletningsudtrykket ikke gøre noget og vurderes til falsk. I streng tilstand får du en TypeError, når du prøver at slette en ikke-konfigurerbar ejendom. (I normal tilstand mislykkes forsøget simpelthen, og sletningsudtrykket evalueres til falsk). I streng tilstand betragtes det som en syntaktisk fejl, når du prøver at definere flere egenskaber med samme navn for et objekt bogstaveligt. (I normal tilstand er der ingen fejl.) I streng tilstand betragtes det som en syntaktisk fejl, når en funktionserklæring har flere parametre med samme navn. (I normal tilstand er der ingen fejl.) I streng tilstand er oktale bogstaver ikke tilladt (disse er bogstaver, der starter med 0x. (I normal tilstand tillader nogle implementeringer oktale bogstaver.) I streng tilstand behandles identifikatorernes eval og argumenter som nøgleord. Du kan ikke ændre deres værdi, kan ikke tildele en værdi til dem, og du kan ikke bruge dem som navne på variabler, funktioner, funktionsparametre eller identifikatorer for en fangstblok. I streng tilstand er der flere begrænsninger for mulighederne for at undersøge opkaldsstakken. argument.caller og argumenter.callee forårsager en TypeError i en funktion i streng tilstand. Desuden forårsager nogle opkalds- og argumentegenskaber for funktioner i streng tilstand en TypeError, når du prøver at læse dem. | Mine to cent: Et af målene med streng tilstand er at muliggøre hurtigere fejlfinding af problemer. Det hjælper udviklerne ved at kaste undtagelse, når der opstår visse forkerte ting, der kan forårsage lydløs og mærkelig opførsel på din webside. I det øjeblik vi bruger streng, kaster koden fejl, som hjælper udvikleren med at rette det på forhånd. Få vigtige ting, som jeg har lært efter brug af streng: Forhindrer global variabel erklæring: var tree1Data= {navn: 'Banantræ', alder: 100, leafCount: 100000}; funktionstræ (typeOfTree) { var alder; var bladTælling; alder = typeOfTree.age; leafCount = typeOfTree.leafCount; nameoftree = typeOfTree.name; }; var tree1 = nyt træ (tree1Data); console.log (vindue); Nu opretter denne kode navnefri i globalt omfang, som man kan få adgang til ved hjælp af window.nameoftree. Når vi implementerer brug streng, vil koden kaste fejl. Ikke fanget referencefejl: nameoftree er ikke defineret Prøve Elimineres med udsagn: med udsagn kan ikke minificeres ved hjælp af værktøjer som uglify-js. De er også udfaset og fjernet fra fremtidige JavaScript-versioner. Prøve Forhindrer duplikater: Når vi har duplikategenskab, kaster det en undtagelse Ikke fanget SyntaxError: Duplicate data egenskab i objekt bogstaveligt ikke tilladt i streng tilstand "brug streng"; var tree1Data = { navn: 'Banantræ', alder: 100, bladTælling: 100000, navn: 'Banantræ' }; Der er få flere, men jeg har brug for at få mere viden om det. | Hvis du bruger en browser, der er udgivet i det sidste år eller deromkring, understøtter den sandsynligvis JavaScript Strict-tilstand. Kun ældre browsere, inden ECMAScript 5 blev den nuværende standard, understøtter det ikke. Citaterne omkring kommandoen sørger for, at koden stadig også fungerer i ældre browsere (selvom de ting, der genererer en syntaksfejl i streng tilstand, generelt kun får scriptet til at fungere på en eller anden måde svært at opdage i de ældre browsere). | Når du tilføjer "brug streng"; kaster følgende tilfælde en syntaksfejl, før scriptet udføres: Bane vejen for fremtidige ECMAScript-versioner ved hjælp af et af de nyligt reserverede nøgleord (forud for ECMAScript 6): implementerer, interface, let, pakke, privat, beskyttet, offentligt, statisk og udbytte. Erklæringsfunktion i blokke hvis (a : 3: 15) ved: 6: 5 Her kaster compileren referencefejlen. I streng tilstand tillader compileren os ikke at bruge variablen uden at erklære den. Så hukommelseslækage kan forhindres. Derudover kan vi skrive mere optimeret kode. | Streng tilstand eliminerer fejl, der ville blive ignoreret i ikke-streng tilstand, hvilket gør javascript "mere sikret". Betegnes det blandt bedste praksis? Ja, det betragtes som en del af de bedste fremgangsmåder, mens du arbejder med javascript for at inkludere Streng-tilstand. Dette gøres ved at tilføje nedenstående kodelinje i din JS-fil. 'brug streng'; i din kode. Hvad betyder det for brugeragenter? Angivelse af, at koden skal fortolkes i streng tilstand, specificerer for brugeragenter som browsere, at de skal behandle kode bogstaveligt som skrevet, og kaste en fejl, hvis koden ikke giver mening. For eksempel: Overvej i din .js-fil, at du har følgende kode: Scenarie 1: [NO STRICT MODE] var city = "Chicago" console.log (by) // Udskriver bynavnet, dvs. Chicago Scenarie 2: [NO STRICT MODE] by = "Chicago" console.log (by) // Udskriver bynavnet, dvs. Chicago Så hvorfor udskrives variabelnavnet i begge tilfælde? Uden streng tilstand slået til gennemgår brugeragenter ofte en række ændringer til problematisk kode i et forsøg på at få det til at give mening. På overfladen kan dette virke som en fin ting, og det at arbejde uden for streng tilstand gør det muligt for folk at få deres fødder våde med JavaScript-kode uden at have alle detaljer spikret. Som udvikler vil jeg dog ikke efterlade en fejl i min kode, fordi jeg ved, at den kunne komme tilbage og bide mig senere, og jeg vil også bare skrive en god kode. Og det er her, streng tilstand hjælper. Scenarie 3: [STRINKTILSTAND] 'brug streng'; by = "Chicago" console.log (by) // Referencefejl: asignment er sort oplyst variabel by. Yderligere tip: For at opretholde kodekvalitet ved hjælp af streng tilstand behøver du ikke skrive dette igen og igen, især hvis du har flere .js-filer. Du kan håndhæve denne regel globalt i eslint-regler som følger: Filnavn: .eslintrc.js module.exports = { env: { es6: sandt }, regler: { streng: ['error', 'global'], }, }; Okay, så hvad forhindres i streng tilstand? Brug af en variabel uden at erklære, det vil kaste en fejl i streng tilstand. Dette er for at forhindre utilsigtet oprettelse af globale variabler i hele din applikation. Eksemplet med udskrivning af Chicago dækker især dette. Sletning af en variabel eller en funktion eller et argument er et nej-nej i streng tilstand. "brug streng"; funktion x (p1, p2) {}; slet x; // Dette vil medføre en fejl Kopiering af et parameternavn er ikke tilladt i streng tilstand. "brug streng"; funktion x (p1, p1) {}; // Dette vil medføre en fejl Reserverede ord på Javascript-sproget er ikke tilladt i streng tilstand. Ordene er implementeringsgrænseflade, let, pakker, privat, beskyttet, offentligt. statisk og udbytte For en mere omfattende liste, se MDN-dokumentationen her: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode | Meget aktivt spørgsmål. Optjen 10 omdømme for at besvare dette spørgsmål. Omdømmekravet hjælper med at beskytte dette spørgsmål mod spam og ikke-svar-aktivitet. Er det ikke det svar, du leder efter? Gennemse andre spørgsmål, der er tagget javascript-syntaks jslint brug-streng, eller still dit eget spørgsmål.